﻿using System;
using System.Collections.Generic;
using System.Linq;
using MySql.Data.MySqlClient; // Используем класс MySQL для подключения в БД
using System.Text;
using System.Threading.Tasks;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Data;
using System.Windows.Documents;
using System.Windows.Input;
using System.Windows.Media;
using System.Windows.Media.Imaging;
using System.Windows.Shapes;

namespace Hammer_store
{
    /// <summary>
    /// Логика взаимодействия для Authorization.xaml
    /// </summary>
    /// 
    public partial class Authorization : Window
    {

        internal bool[] successField = new bool[2] { false, false };

        internal Authorization()
        {
            InitializeComponent();
        }

        /* Событие-нажатие левой кнопки мыши: Перетаскивание окна */
        private void TitleBar_MouseDown(object sender, MouseButtonEventArgs e)
        {
            if (e.ChangedButton == MouseButton.Left)
                this.DragMove();
        }

        /* Событие-нажатие по крестику: Закрытие окна */
        private void Image_cross_MouseDown(object sender, MouseButtonEventArgs e)
        {
            Application exit = Application.Current;
            exit.Shutdown();
        }

        /* Событие-нажатие по картинке свернуть: Сворачивание окна */
        private void Image_colapso_MouseDown(object sender, MouseButtonEventArgs e)
        {
            this.WindowState = WindowState.Minimized;
        }

        /* Событие-потеря фокуса: Поле логина */
        private void textBox_login_LostFocus(object sender, RoutedEventArgs e)
        {
            string loginLine = textBox_InputLogin.Text; //Присваивание введенной строки
            short existSymbol = 0;                      //Флажок для существования спец. символа

            if (loginLine != "")
            {
                //Проверка на существование числа
                if (Char.IsDigit(loginLine[0]))
                {
                    existSymbol = 2; //Присваиваем 2, чтобы появился полигон при проверке на спец. символ
                    textBox_InputLogin.BorderBrush = Brushes.Red;
                    ErrorMessagePolygon_Login.Visibility = Visibility.Visible;
                    labelErrorMessageOne_Login.Visibility = Visibility.Visible;
                }
                else
                {
                    ErrorMessagePolygon_Login.Visibility = Visibility.Hidden;
                    labelErrorMessageOne_Login.Visibility = Visibility.Hidden;
                };

                //Массив спец. символов
                char[] arraySymbols = {'!', '@', '#', '$', '%', '^', '&', '*', '(',
                                   ')', '-', '+', '=', '/', '|', '\\', '{', '}',
                                   '[', ']', ';', ':', '"', '\'', ',', '.', '<',
                                   '>', '?'};

                //Проверка на существование спец. символа в начале
                for (int i = 0; i < arraySymbols.Length; i++)
                {
                    if (loginLine[0] == arraySymbols[i])
                        existSymbol = 1;
                }

                if (existSymbol == 1)
                {
                    textBox_InputLogin.BorderBrush = Brushes.Red;
                    ErrorMessagePolygon_Login.Visibility = Visibility.Visible;
                    labelErrorMessageTwo_Login.Visibility = Visibility.Visible;
                }
                else if
                    (existSymbol == 0)
                {
                    ErrorMessagePolygon_Login.Visibility = Visibility.Hidden;
                    labelErrorMessageTwo_Login.Visibility = Visibility.Hidden;
                }

                if (loginLine.Length <= 3)
                {
                    textBox_InputLogin.BorderBrush = Brushes.Red;
                    ErrorMessagePolygon_Login.Visibility = Visibility.Visible;
                    labelErrorMessageFour_Login.Visibility = Visibility.Visible;
                }

                if (loginLine.Contains(" ") & existSymbol == 0)
                {
                    textBox_InputLogin.BorderBrush = Brushes.Red;
                    ErrorMessagePolygon_Login.Visibility = Visibility.Visible;
                    labelErrorMessageFive_Login.Visibility = Visibility.Visible;
                }

                //Проверка на верное поле
                if (textBox_InputLogin.BorderBrush == Brushes.LimeGreen) successField[0] = true;
                else successField[0] = false;
            }
        }

        /* Событие-получение фокуса: Поле логина */
        private void textBox_login_GotFocus(object sender, RoutedEventArgs e)
        {
            textBox_InputLogin.BorderBrush = null;
            ErrorMessagePolygon_Login.Visibility = Visibility.Hidden;
            labelErrorMessageOne_Login.Visibility = Visibility.Hidden;
            labelErrorMessageTwo_Login.Visibility = Visibility.Hidden;
            labelErrorMessageThree_Login.Visibility = Visibility.Hidden;
            labelErrorMessageFour_Login.Visibility = Visibility.Hidden;
            labelErrorMessageFive_Login.Visibility = Visibility.Hidden;
        }

        /* Событие-потеря фокуса: Поле пароля */
        private void passwordBox_pass_LostFocus(object sender, RoutedEventArgs e)
        {
            string passLine1 = passwordBox_pass.Password;

            if (passLine1 != "")
            {
                //Проверка на содержание более 7 символов и отсутствие символов киррилицы
                var cyrillic = Enumerable.Range(1024, 256).Select(ch => (char)ch);
                bool res = passLine1.Any(cyrillic.Contains);

                if (res == true)
                {
                    passwordBox_pass.BorderBrush = Brushes.Red;
                    labelErrorMessageOne_Pass1.Visibility = Visibility.Visible;
                    ErrorMessagePolygon_Pass1.Visibility = Visibility.Visible;
                }
                else if (res == false & passLine1.Length >= 7)
                {
                    passwordBox_pass.BorderBrush = Brushes.LimeGreen;
                    labelErrorMessageOne_Pass1.Visibility = Visibility.Hidden;
                    ErrorMessagePolygon_Pass1.Visibility = Visibility.Hidden;
                }
                else if (res == false & passLine1.Length < 7)
                {
                    passwordBox_pass.BorderBrush = Brushes.Red;
                    labelErrorMessageTwo_Pass1.Visibility = Visibility.Visible;
                    ErrorMessagePolygon_Pass1.Visibility = Visibility.Visible;
                }

                //Проверка на пробелы
                if (passLine1.Contains(" "))
                {
                    passwordBox_pass.BorderBrush = Brushes.Red;
                    labelErrorMessageThree_Pass1.Visibility = Visibility.Visible;
                    ErrorMessagePolygon_Pass1.Visibility = Visibility.Visible;
                }
            }

            if (passwordBox_pass.BorderBrush == Brushes.LimeGreen) successField[1] = true;
            else successField[1] = false;
        }

        /* Событие-получение фокуса: Поле пароля */
        private void passwordBox_pass_GotFocus(object sender, RoutedEventArgs e)
        {
            passwordBox_pass.BorderBrush = null;
            ErrorMessagePolygon_Pass1.Visibility = Visibility.Hidden;
            labelErrorMessageOne_Pass1.Visibility = Visibility.Hidden;
            labelErrorMessageTwo_Pass1.Visibility = Visibility.Hidden;
            labelErrorMessageThree_Pass1.Visibility = Visibility.Hidden;
        }

        /* Событие-нажатие по глазу: Скрытие пароля */
        private void Image_EyeHide1_MouseDown(object sender, MouseButtonEventArgs e)
        {
            textBox_OutputPass.Text = passwordBox_pass.Password;
            textBox_OutputPass.Visibility = Visibility.Visible;
            passwordBox_pass.Visibility = Visibility.Hidden;
            Image_EyeHide1.Visibility = Visibility.Hidden;
            Image_EyeVisible1.Visibility = Visibility.Visible;
        }

        /* Событие-нажатие по глазу: Отображение пароля */
        private void Image_EyeVisible1_MouseDown(object sender, MouseButtonEventArgs e)
        {
            passwordBox_pass.Password = textBox_OutputPass.Text;
            textBox_OutputPass.Visibility = Visibility.Hidden;
            Image_EyeVisible1.Visibility = Visibility.Hidden;
            passwordBox_pass.Visibility = Visibility.Visible;
            Image_EyeHide1.Visibility = Visibility.Visible;
        }

        /* Событие-кнопка: Вход в аккаунт */
        internal void button_signIn_Click(object sender, RoutedEventArgs e)
        {
            DB db = new DB();

            System.Data.DataTable table = new System.Data.DataTable();

            MySqlDataAdapter adapter = new MySqlDataAdapter();


            //Передача объекту запрос с введенным в TextBox`ы пароль и логин
            MySqlCommand command = new MySqlCommand("SELECT * FROM `Users` WHERE `login` = @login AND `pass` = @pass", db.getConnection());
            command.Parameters.Add("@login", MySqlDbType.VarChar).Value = textBox_InputLogin.Text; //Передача логина
            command.Parameters.Add("@pass", MySqlDbType.VarChar).Value = passwordBox_pass.Password; //Передача пароля

            //Передача объекта с запросом к СУБД
            adapter.SelectCommand = command;

            //Заполнение таблицы данными
            adapter.Fill(table);

            //Проверка есть ли в базе пользователь + блокировка открытия формы
            if (table.Rows.Count > 0)
            {
                MessageBox.Show("Вход выполнен");

                MainWindow showMainWindow = new MainWindow();
                showMainWindow.Show(); //Отображаем MainWindow
                this.Hide(); //Скрываем Authorization
            }
            else MessageBox.Show("Вход не выполнен");
        }

        /* Событие-кнопка: Вернуться в окно UserVerification */
        internal void button_backOnUserVerification_Click(object sender, RoutedEventArgs e)
        {
            Begin_UserVerification begin_UserVerification = new Begin_UserVerification();
            begin_UserVerification.Show();
            this.Hide();
        }

    }
}
